package com.ddshuai.easy;

/**
 * 描述 新通教育
 * <p>
 * 给定一个正整数 N，找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离。
 * <p>
 * 如果没有两个连续的 1，返回 0 。
 * <p>
 * 输入：22
 * 输出：2
 * 解释：
 * 22 的二进制是 0b10110 。
 * 在 22 的二进制表示中，有三个 1，组成两对连续的 1 。
 * 第一对连续的 1 中，两个 1 之间的距离为 2 。
 * 第二对连续的 1 中，两个 1 之间的距离为 1 。
 * 答案取两个距离之中最大的，也就是 2 。
 * <p>
 * 输入：5
 * 输出：2
 * 解释：
 * 5 的二进制是 0b101 。
 * <p>
 * 输入：6
 * 输出：1
 * 解释：
 * 6 的二进制是 0b110 。
 * <p>
 * 输入：8
 * 输出：0
 * 解释：
 * 8 的二进制是 0b1000 。
 * 在 8 的二进制表示中没有连续的 1，所以返回 0 。
 *
 * @author ddshuai
 * @date 2018-12-14 14:59
 **/
public class BinaryGap {
    public int binaryGap(int N) {
        String b = Integer.toBinaryString(N);
        int start = b.indexOf("1");
        int max = 0;
        while (start > -1) {
            int next = b.indexOf("1", start + 1);
            if (next > -1) {
                max = (next - start) > max ? (next - start) : max;
            }
            start = next;
        }

        return max;
    }

    public static void main(String[] args) {
        System.out.println(new BinaryGap().binaryGap(22));
        System.out.println(new BinaryGap().binaryGap(10));
        System.out.println(new BinaryGap().binaryGap(5));
        System.out.println(new BinaryGap().binaryGap(6));
        System.out.println(new BinaryGap().binaryGap(8));
    }
}
